Dll a string

Otázka od: EFG developer

29. 10. 2002 11:00

Zdravim,
vim, ze se to tu jiz nekolikrat probiralo ale presto:
jak udelat, aby mi funkce v Dll vratila string.

prosim o ukazku kodu v dll i ukazku kodu v aplikaci.

Dekuji Petr Sikola


Odpovedá: Jan Sebelík

29. 10. 2002 13:22

> Odesílatel: EFG developer <developer@efg.cz>
> vim, ze se to tu jiz nekolikrat probiralo ale presto:
> jak udelat, aby mi funkce v Dll vratila string.

Promin, ale taky tady mnohokrat bylo, ze parametry a Result funkci v DLL je
lepsi psat jako PChar.
Uz kvuli tomu, ze jednim z ucelu DLL je jejich nezavislost na vyvojove
platforme. Pascalovsky String z/do C ani z/do jineho prostredi stejne
nedostanes.

Jinak, abych preci jenom odpovedel:
z DLL je to stejne, jako, kdyz ji volas z unit.
Jenom musis napsat nejake to uses ShareMem (nebo co, presne nevim) - viz popis
pri File / New / DLL

Honza
=========================================
= HAES - RNDr. Jan Sebelik
= http://www.haes.cz
= Skolici a konzultacni stredisko pro Delphi a Win32
= Vojtiskova 206
= 507 81 Lazne Belohrad
= tel. 493 792 931 (mobil 776 347735)
=========================================

Odpovedá: Jan Sebelík

29. 10. 2002 12:47

> Odesílatel: EFG developer <developer@efg.cz>
> vim, ze se to tu jiz nekolikrat probiralo ale presto:
> jak udelat, aby mi funkce v Dll vratila string.

Promin, ale taky tady mnohokrat bylo, ze parametry a Result funkci v DLL je
lepsi psat jako PChar.
Uz kvuli tomu, ze jednim z ucelu DLL je jejich nezavislost na vyvojove
platforme. Pascalovsky String z/do C ani z/do jineho prostredi stejne (jen tak
lehce) nedostanes.

Jinak, abych preci jenom odpovedel:
z DLL je to stejne, jako, kdyz ji volas z unit.
Jenom musis napsat nejake to uses ShareMem (nebo co, presne nevim) - viz popis
pri File / New / DLL

Honza
=========================================
= HAES - RNDr. Jan Sebelik
= http://www.haes.cz
= Skolici a konzultacni stredisko pro Delphi a Win32
= Vojtiskova 206
= 507 81 Lazne Belohrad
= tel. 493 792 931 (mobil 776 347735)
=========================================

Odpovedá: EFG developer

29. 10. 2002 13:34

OK, je mi to jasne  
tedy: potrebuju vracet string, ale staci mi to pres PChar - a k tomu
bych potreboval ten kousek kodu, protoze nevim jak to udelat.

Petr

> Promin, ale taky tady mnohokrat bylo, ze parametry a Result
> funkci v DLL je lepsi psat jako PChar.
> Uz kvuli tomu, ze jednim z ucelu DLL je jejich nezavislost na
> vyvojove platforme. Pascalovsky String z/do C ani z/do jineho
> prostredi stejne (jen tak lehce) nedostanes.
>
> Jinak, abych preci jenom odpovedel:
> z DLL je to stejne, jako, kdyz ji volas z unit.
> Jenom musis napsat nejake to uses ShareMem (nebo co, presne
> nevim) - viz popis pri File / New / DLL
>
> Honza

Odpovedá: Petr Fejfar

29. 10. 2002 13:35

From: "EFG developer" <developer@efg.cz>

> OK, je mi to jasne  
> tedy: potrebuju vracet string, ale staci mi to pres
> PChar - a k tomu bych potreboval ten kousek kodu,
> protoze nevim jak to udelat.

Typicky se to dela takto:


function XYZ(ABuf:pChar; AMaxLen:integer): integer;
var
  S: ANSIString;
begin
  S := 'Tohle je text, ktery chci vratit';
  strLCopy(ABuf,pChar(S),AMaxLen-1);
  Result := strlen(ABuf);
end;

...

var
  S: ANSIString;
  MaxLen: integer;
  ActLen: integer;
begin
  ...
  MaxLen := 64;
  SetLength(S,MaxLen);
  ActLen := XYZ(pChar(S),MaxLen);
  SetLength(S,ActLen);
  ...
end;

HTH, pf


Odpovedá: Petr Vones

29. 10. 2002 13:48

From: "EFG developer" <developer@efg.cz>
> vim, ze se to tu jiz nekolikrat probiralo ale presto:
> jak udelat, aby mi funkce v Dll vratila string.
>
> prosim o ukazku kodu v dll i ukazku kodu v aplikaci.

http://delphi.cz/soubor.asp?rok=2002&mesic=jan&den=04&soubor=dlfaaabx.htm

Petr Vones